冒泡排序
思路:比较相邻项,如果第一个比第二个大,则交换他们,元素向上移动,好像气泡升至表面
时间复杂度:O(n^2)
1 | const arr = [5, 1, 0, 2, 8, 9]; |
选择排序
思路:找到最小值的index与第一位交换,接着第二小的放第二位
时间复杂度:O(n^2)
1 | const arr = [5, 1, 0, 2, 8, 9]; |
插入排序
思路:假定第一位已经排好序了,接着和第二项进行比较,确定第二项插入位置,这样前两项排好序了,第三项分别和第二项、第一项比较,以此类推
复杂度:排序小型数组优于选择和冒泡
1 | const arr = [5, 1, 0, 2, 8, 9]; |
归并排序
思路:将原始数组分割直至只有一个元素的子数组,然后开始归并。归并过程也会完成排序,直至原始数组完全合并并完成排序。
复杂度:O(nlogn)
1 | const arr = [5, 1, 0, 2, 8, 9]; |
快速排序
思路:选定数组中间值,拆分左右数组,左右指针向中间移动最终使数组左边均小于中间值,右边均大于中间值,得到左右两个数组继续
时间复杂度:O(nlogn)
1 | const arr = [14, 3, 15, 7, 2, 76, 11]; |